package com.education.ai.service;

import com.education.ai.entity.StudentMistakeCollection;
import com.education.ai.entity.StudentPracticeSession;

import java.util.List;
import java.util.Map;

/**
 * 学生练习服务接口
 */
public interface StudentPracticeService {
    
    /**
     * 保存学生练习会话
     *
     * @param session 练习会话
     * @param answers 答案列表
     * @return 分析结果
     */
    Map<String, Object> savePracticeSession(StudentPracticeSession session, List<Map<String, Object>> answers);
    
    /**
     * 获取学生错题集
     *
     * @param studentId 学生ID
     * @param subject 学科（可选）
     * @return 错题集列表
     */
    List<StudentMistakeCollection> getMistakeCollection(String studentId, String subject);
    
    /**
     * 添加错题到错题集
     *
     * @param mistake 错题信息
     * @return 保存的错题
     */
    StudentMistakeCollection addToMistakeCollection(StudentMistakeCollection mistake);
    
    /**
     * 从错题集移除
     *
     * @param mistakeId 错题ID
     */
    void removeFromMistakeCollection(Long mistakeId);
    
    /**
     * 获取学生最近的练习会话
     *
     * @param studentId 学生ID
     * @param limit 限制数量
     * @return 练习会话列表
     */
    List<StudentPracticeSession> getRecentPracticeSessions(String studentId, int limit);
    
    /**
     * 生成学习报告
     *
     * @param studentId 学生ID
     * @param subject 学科
     * @return 学习报告数据
     */
    Map<String, Object> generateLearningReport(String studentId, String subject);
    
    /**
     * 更新错题状态
     *
     * @param mistakeId 错题ID
     * @param studentId 学生ID
     * @param resolved 是否已解决
     */
    void updateMistakeStatus(Long mistakeId, String studentId, boolean resolved);
    
    /**
     * 验证错题所属权
     * @param mistakeId 错题ID
     * @param studentId 学生ID
     * @return 是否属于该学生
     */
    boolean validateMistakeOwnership(Long mistakeId, String studentId);
    
    /**
     * 更新学习进度
     *
     * @param studentId 学生ID
     * @param subject 学科
     * @param knowledgePoint 知识点
     * @param isCorrect 是否答对
     */
    void updateLearningProgress(String studentId, String subject, String knowledgePoint, Boolean isCorrect);
} 